package modelo;

import gui.curso.PanelCurso;

import interfaz.IEntidad;

import java.util.List;

import javax.swing.table.AbstractTableModel;

import manejador.ManejadorDeCalificacion;
import manejador.ManejadorDeCurso;
import manejador.ManejadorDeEmpleado;
import entidad.Calificacion;

import entidad.Curso;
import entidad.Empleado;

public class ModeloCalificacion extends AbstractTableModel {

	private static final long serialVersionUID = 1L;
	private ManejadorDeCalificacion manejadorDeCalificacion = null;
	private List<IEntidad> calificaciones = null;
	private static ModeloCalificacion instancia = null;
	private String[] encabezados = null;
	private static String parametro = "TODOS";
	private Calificacion calificacion = null;

	public static ModeloCalificacion getInstancia() {
		if (instancia == null) {
			instancia = new ModeloCalificacion();
		}
		return instancia;
	}

	private ModeloCalificacion() {
		manejadorDeCalificacion = ManejadorDeCalificacion.getInstancia();
		encabezados = new String[] { "ID Calificacion", "Nota Curso",
				"Nota Promedio", "Curso", "Profesor" };
		calificaciones = manejadorDeCalificacion.getEntidad();
	}

	public String getColumnName(int indice) {
		return encabezados[indice];

	}

	@Override
	public int getColumnCount() {
		return encabezados.length;

	}

	@Override
	public int getRowCount() {

		return calificaciones.size();
	}

	@Override
	public Object getValueAt(int fila, int columna) {
		String retorno = "";
		calificacion = (Calificacion) calificaciones.get(fila);

		Curso curso = (Curso) ManejadorDeCurso.getInstancia().getEntidadPorId(
				PanelCurso.getIdCurso());
		Empleado empleado = (Empleado) ManejadorDeEmpleado.getInstancia()
				.getEntidadPorId(curso.getIdEmpleado());

		switch (columna) {
		case 0:
			retorno = String.valueOf(calificacion.getIdCalificacion());
			break;
		case 1:
			retorno = String.valueOf(calificacion.getNotaCurso());
			break;
		case 2:
			retorno = String.valueOf(calificacion.getNotaPromedio());
			break;
		case 3:
			retorno = curso.getNombre();
			break;
		case 4:
			retorno = empleado.getNombre() + " " + empleado.getApellido();
			break;

		}

		return retorno;
	}

	public void agregar(IEntidad entidad) {
		manejadorDeCalificacion.agregar(entidad);
		fireTableDataChanged();

	}

	public int getUltimoRegistroDeTablaCalificacion() {
		return manejadorDeCalificacion.getUltimoRegistroDeTablaCalificacion();
	}

	public static String getParametro() {
		return parametro;
	}

	public static void setParametro(String parametro) {
		ModeloCalificacion.parametro = parametro;
	}

	public int getCalificacionCurso(int idEstudiante, int idCurso) {

		return manejadorDeCalificacion.getCalificacionCurso(idEstudiante,
				idCurso);
	}

	public int getEstudianteNotaPromedio(int idEstudiante) {
		return manejadorDeCalificacion.getEstudianteNotaPromedio(idEstudiante);
	}

	public void actualizarNotaPromedioTablaCalificacion(int notaPromedio,
			int idCalificacion) {
		manejadorDeCalificacion.actualizarNotaPromedioTablaCalificacion(
				notaPromedio, idCalificacion);
	}

	public void actualizarNotaCursoTablaCalificacion(int notaCurso,
			int idCalificacion) {
		manejadorDeCalificacion.actualizarNotaCursoTablaCalificacion(notaCurso,
				idCalificacion);
	}

}
